package com.woniu.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.woniu.commons.exception.YogaException;
import com.woniu.model.dto.UserDto;
import com.woniu.model.entity.YUser;
import com.woniu.model.form.PageAllStudentForm;
import com.woniu.model.form.RealNameAuthenticationForm;
import com.woniu.model.param.*;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author 胡歌
 * @since 2024年05月22日
 */
public interface YUserService extends IService<YUser> {
    /**
     *用户的手机号注册
     *   需要带的参数为注册时发送的验证码 code;
     *      userName;
     *      userNickname;
     *      userPhone;
     *      userEmail;
     *      userPass;
     *     身份证 idCard;
     * @param
     * @return
     */
    public void CodeRegister(CodeRegisterParam param)throws Exception;
    /**
     *用户修改个人头像  传入图片地址转换为字符串
     * @param
     * @return
     */
    void updateImage(UpdateUserImageParam param);

    /**
     *用户修改个人昵称  传入要修改的用户的ID  和修改的昵称
     * @param
     * @return
     */
    YUser UpdateNickName(UpdateNickNameParam param);
    /**
     * 发送注册验证码的接口
     * @param mobile
     * @return
     * @throws Exception
     */
    void sendRegisterCode(String mobile);
    /**
     *用户发送修改手机号验证码
     *
     * @param
     * @return
     */
    void UpdateUserPhone(String mobile);
    /**
     *用户的账号密码登录
     * @param
     * @return
     */
    UserDto userlogin(UserInfoLoginParam param);
    /**
     * 用户修改密码  修改密码需要先传入之前的密码，然后在修改密码   新旧密码不能是重复的
     * @param
     * @return
     */
    void UpdateUserPassword( UpdateUserPasswordParam param)throws Exception;

    /**
     *用户的手机号修改
     * 需要传的值  老的手机号 发送的验证码code  在传入新的手机号
     * @param
     * @return
     */
    void codeUpdate(CodeUpdateParam param)throws Exception;
    /**
     *判断用户身份证是否合法
     *
     * @param
     * @return
     */

    boolean inspectIdCard(String IdCard);

    String userRealNameAuthentication(RealNameAuthenticationForm form);

    /**
     * 分页查询所有用户
     * @param param 分页参数
     * @return
     * @throws Exception
     */
    public Page<YUser> pageAllUser(PageAllParam param)throws YogaException;

    Page<YUser> pageAllStudent(PageAllStudentForm form);

    Page<YUser> pageAllPersonalStudent(PageAllStudentForm form);

    YUser loadUsersByIds(Integer userId);
}
